﻿using System;
using System.Collections.Generic;
using System.Text;

using Galaxy.ModuleInterface.Messages;
using System.Runtime.Serialization;

namespace Galaxy.ModuleInterface.Events
{
    /// <summary>Обработчик событий модкуя Галактики</summary>
    /// <param name="Module">Модуль</param>
    /// <param name="Arg">Аргумент события</param>
    public delegate void GalaxyModuleEventHandler(IGalaxyModule Module, GalaxyModuleEventArgs Arg);

    /// <summary>Обработчик события наличия нового сообщения у модуля</summary>
    /// <param name="Module">Модуль</param>
    /// <param name="Arg">Аргументы нового сообщения</param>
    public delegate void NewMessageEventHandler(IGalaxyModule Module, NewMessageEventArgs Arg);

    /* --------------------------------------------------------------------- */

    /// <summary>Аргументы событий модуля Галактики</summary>
    [Serializable]
    public class GalaxyModuleEventArgs : EventArgs { }

    /// <summary>Аргументы событий наличия нового сообщения у модуля</summary>
    [Serializable]
    public class NewMessageEventArgs : GalaxyModuleEventArgs
    {
        /// <summary>Поле, содержащее сообщение модуля</summary>
        public IGalaxyModuleMessage Message;

        /// <summary>Аргументы событий наличия нового сообщения у модуля</summary>
        /// <param name="Message">Сообщение модуля</param>
        public NewMessageEventArgs(IGalaxyModuleMessage Message)
        {
            this.Message = Message;
        }

        //public static implicit operator IGalaxyModuleMessage(NewMessageEventArgs Arg)
        //{
        //    return Arg.Message;
        //}

        //public static implicit operator NewMessageEventArgs(IGalaxyModuleMessage Message)
        //{
        //    return new NewMessageEventArgs(Message);
        //}
    }
}

namespace Galaxy.ModuleInterface
{
    using Galaxy.ModuleInterface.Events;

    public partial interface IGalaxyModule
    {
        /* --------------------------------------------------------------------- */

        /// <summary>Есть новое сообщение у модуля</summary>
        event NewMessageEventHandler NewMessage;

        /// <summary>Обработчик нового сообщения</summary>
        /// <param name="Module">Отправитель сообщения</param>
        /// <param name="Arg">Аргументы нового сообщения</param>
        void ReceiveMessage(IGalaxyModule Module, NewMessageEventArgs Arg);

        /* --------------------------------------------------------------------- */
    }
}
